import pickle
f = open('beforeNMS.pkl', 'rb')
dets = pickle.loads(f.read())
f.close()
from evaluate import write_results
import numpy as np

THRESH = 0.3
resultDir = 'newNMS/'

def nms(dets, thresh):
    x1 = dets[:, 0]
    y1 = dets[:, 1]
    x2 = dets[:, 2]
    y2 = dets[:, 3]
    scores = dets[:, 4]

    areas = (x2 - x1 + 1) * (y2 - y1 + 1)
    # order 保存排序后的下标， order[0] 对应的索引是 score 最高元素的下标 
    order = scores.argsort()[::-1]

    keep = []
    while order.size > 0:
        # 保存 score 最高的框
        i = order[0]
        keep.append(int(i))
        xx1 = np.maximum(x1[i], x1[order[1:]])
        yy1 = np.maximum(y1[i], y1[order[1:]])
        xx2 = np.minimum(x2[i], x2[order[1:]])
        yy2 = np.minimum(y2[i], y2[order[1:]])

        w = np.maximum(0.0, xx2 - xx1 + 1)
        h = np.maximum(0.0, yy2 - yy1 + 1)
        inter = w * h
        ovr = inter / (areas[i] + areas[order[1:]] - inter)

        inds = np.where(ovr <= thresh)[0]
        # 留下 overlap 小于 thresh 的部分
        order = order[inds + 1]

    return np.array(keep).astype(np.int)


for elm in dets:
    # '0--Parade/0_Parade_marchingband_1_465.jpg'
    fileName = elm[0]
    dets = elm[1]
    keep = nms(dets, thresh = THRESH)
    dets = dets[keep]
    write_results(dets, fileName, 'val', resultDir)
